dialog Package

dialog 패키지는 ANSI 이스케이프 제어 코드를 이용해 텍스트 환경에서 표준 창 대화상자를 재현한다.
sudo apt-get install dialog
brew install dialog
~/.dialogrc 를 통해서 customize
widget
calendar
checklist
form
fselect
gauge
infobox
inputbox
inputmenu
menu
msgbox
pause
passwordbox
passwordform
radiolist
tailbox tail
tailboxbg
textbox
timebox
yesno
dialog
dialog --widget parameters
각각의 대화 위젯은 아래의 두 가지 방법을 이용해서 출력을 제공한다.
- STDERR
- 종료 코드 상태 사용

<OK> 또는 <Yes> 버튼을 선택하면 대화 명령은 종료 상태 0을
<Cancel> 또는 <No> 버튼을 선택하면 종료 상태 1을 돌려준다.

위젯이 메뉴 선택과 같은 데이터를 돌려줄 때에는 dialog 명령은 STDERR로 데이터를 전송한다.
dialog --inputbox "Enter your age: " 10 20 2>age.txt

msgbox widget
사용자가 <OK> 를 입력할 때까지 간단한 메시지를 출력하는 상자
dialog --msgbox text height width
dialog --title titleText --msgbox text height width
dialog 인터페이스는 터미널 애뮬레이터가 마우스 인터럽트를 지원한다면 클릭으로 입력할 수 있으며,
그렇지 않더라도 키보드 명령으로 클릭을 시뮬레이션 할 수 있다.
yesno widget
예/아니오 질문에 대한 대답을 입력 받을 수 있다.
dialog --title titleText --yesno text height width
yes: 종료 상태 0
no: 종료 상태 1
inputbox widget
텍스트 문자열을 입력할 수 있는 간단한 텍스트 상자 영역 제공
dialog 명령은 STDERR로 입력된 문자열 전송
dialog --inputbox text height width 2> output.txt
variable=`cat output.txt`
rm output.txt
개행(\n) 없이 문자열을 전송하기 때문에 변수로 쉽게 전달할 수 있다.
textbox widget
창에 많은 정보를 표시해야 할 때, msgbox 보다는 textbox를 사용하는 것이 좋다.
msgbox는 text를 직접 입력받는 것과는 달리 textbox는 텍스트를 포함하고 있는 파일을 입력으로 받으며,
스크롤 기능을 제공한다.
dialog --textbox file 15 45
menu widget
선택에 태그와 텍스트를 지정해 주면, select의 윈도우 버전을 제공한다.
dialog --menu text height width (한번에 표시할 수 있는 옵션수) # text
dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2> output.txt
fselect widget
파일 이름에 관한 작업을 할 때, 파일 위치를 찾아 파일을 선택할 수 있도록 한다
dialog --title titleText --fselect $HOME/ 10 50 2> output.txt
dialog Options
--title을 포함한 수 많은 옵션을 이용해서 dialog를 커스터마이징 가능하다.

menu
#!/bin/bash
temp=$(mktemp -t test.XXXXXX)
temp2=$(mktemp -t test2.XXXXXX)
function diskspace {
df -k > $temp
dialog --textbox $temp 20 60
}
function whoseon {
who > $temp
dialog --textbox $temp 20 50
}
function memusage {
cat /proc/meminfo > $temp
dialog --textbox $temp 20 50
}
while [ 1 ]; do
dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 0 "Exit" 2> $temp2
if [ $? -eq 1 ]; then
break
fi
selection=$(cat $temp2)
case $selection in
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
0)
clear
break;;
*)
dialog --msgbox "Sorry, invalid selection" 10 30
esac
done
rm -f $temp 2> /dev/null
rm -f $temp2 2> /dev/null